/**
 * 
 * @brief  global_variables.c
 * 全局变量定义文件
 * @param  None
 * 
 * @author xhq
 * @date   2024/11/05
 * 
 */
#include "global_variables.h"

/* 线程/网络相关 */
pthread_t           g_pthread_pid[PTHREAD_NUM_MAX];      // 线程pid
socket_info_type    g_socket_info[SOCKET_TYPE_MAX];      // socket信息全局变量， 配置网络socket全局变量
net_info_type       g_net_info;                          // 全局网络参数变量， ini配置文件中读取的网络配置参数

/* semaphore */
sem_t               g_data_pro_semaphore;                // 数据处理信号量
sem_t               g_dsp_pro_semaphore;                 // dsp数据处理信号量
sem_t               g_mipi_add_ssd_semaphore;            // 将mipi数据保存到ssd信号量
sem_t               g_mipi_send_up_semaphore;            // 将mipi数据发送至上位机信号量
sem_t               g_mipi_send_res_semaphore;           // 上传mipi数据收到回复信号量
sem_t               g_dsp_pro_comlete_semaphore;         // dsp数据处理完成信号量
sem_t               g_track_process_semaphore;           // 追踪算法处理信号量

pthread_mutex_t     g_rf_semaphore;                      // 射频板配置/读取互斥锁
pthread_mutex_t     g_ini_semaphore;                     // ini文件读写互斥锁
pthread_mutex_t     g_net_param_semaphore;               // 网络参数互斥锁
pthread_mutex_t     g_net_send_semaphore;                // 网络发送互斥锁
pthread_mutex_t     g_dsp_param_semaphore;               // dsp参数配置互斥锁
pthread_mutex_t     g_Mutext_mipi_add_ssd;               // 将mipi数据保存到ssd队列互斥锁
pthread_mutex_t     g_Mutext_mipi_send_up[MIPI_CHANNEL_MAX];  // 将mipi数据发送至上位机队列互斥锁,一个mipi数据接收线程对应一个队列对应一个锁
pthread_mutex_t     g_Mutext_mipi_recv_cnt;               // 针对四个mipi接收线程共同维护的接收mipi数据计数值的锁

/* 调试参数 */
uint32_t            g_arm_debug_param[10];                // arm调试参数
uint32_t            g_dsp_debug_param[10];                // dsp调试参数

/* sys param */
sys_info_type       g_sys_info;                           // 系统信息

/* sys status */
device_status_type  g_device_status;                      // 设备状态结构体

/* 原始数据 */
fram_raw_data_info_type g_fram_raw_data_info;                             // fram数据信息
fram_raw_data_type  g_fram_raw_data[RAW_DATA_FRAM_NUM];                   // 原始fram数据， N个

/* 存放发送到上位机的mipi数据，一个mipi数据接收线程对应一个队列 */
STRUCT_MIPI g_mipi_to_up_queue[MIPI_CHANNEL_MAX];

/* 已检测的目标信息 */
object_info_type  g_object_info;


/*********test************/
struct timespec g_timespec_start = {0};
struct timespec g_timespec_end = {0};